package cn.iocoder.yudao.module.system.controller.admin.a_audio_and_video.vo;

import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;

import javax.validation.constraints.Digits;
import javax.validation.constraints.Pattern;
import lombok.Data;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
/**
 * 用户 Base VO，提供给添加、修改、详细的子 VO 使用
 * 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
 */
@Schema(description = "稿件管理 - 音视频 Request VO")
@Data
public class AudioAndVideoBaseVO {

    @Schema(description = "id")
    private Long id; // id

    @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "标题")
    @Size(max = 50, message = "标题长度不能超过50个字符")
    private String title; // 名称

    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "名称")
    @Size(max = 50, message = "名称长度不能超过50个字符")
    private String fileName; // 文件名称

    @Schema(description = "图片作者", example = "图片作者")
    @Size(max = 50, message = "图片作者长度不能超过50个字符")
    private String author; // 作者

    @Schema(description = "来源", example = "来源")
    @Size(max = 50, message = "来源长度不能超过50个字符")
    private String source; // 来源

    @Schema(description = "文件大小", example = "文件大小")
    @Size(max = 50, message = "文件大小不能超过50个字符")
    private String fileSize; // 文件大小

    @Schema(description = "时长", example = "时长")
    @Pattern(regexp = "^[0-9]+$", message = "时长必须是一个正整数")
    @Digits(integer = 9, fraction = 0, message = "时长必须为一个有效的数字，且只能包含整数部分")
    @DecimalMax(value = "86400000", message = "时长不能超过24小时（86400000毫秒）")
    private String duration; // 音视频时长（毫秒）

    @Schema(description = "格式", example = "格式")
    @Size(max = 50, message = "格式不能超过50个字符")
    private String ext; // 格式

    @Schema(description = "简介", example = "简介")
    @Size(max = 500, message = "简介长度不能超过500个字符")
    private String introduction; // 简介

    @Schema(description = "关键词", example = "关键词")
    @Size(max = 500, message = "关键词长度不能超过500个字符")
    private String keyword; // 关键词

    @Schema(description = "分辨率", example = "分辨率")
    @Size(max = 50, message = "分辨率不能超过50个字符")
    private String videoResolution; // 分辨率

    @TableField
    private Integer type; // 类型0：视频、1：音频

    @TableField
    private String videoCoverUrl; // 封面地址

    @TableField
    private String suffix; // 后缀

    @TableField
    private String createUserId; // 创建人

    @TableField
    private String createUserName; // 创建人名称

    @TableField
    private Integer version; // 版本号

    @TableField
    private String url; // 文件存储地址

    @TableField
    private LocalDateTime shootingTime; // 拍摄时间

    @TableField
    private String category; // 类别

    @TableField
    private Integer reviewStatus; // 审核状态

    @TableField
    private Integer transcoderStatus; // 转码状态 0未转码 1转码中 10已转码 -1转码失败

    @TableField
    private String transcoderUrl; // 转码URL

    @TableField
    private String isShare; // 共享状态

    @TableField
    private String isPush; // 推送状态

    @TableField
    private String qukanUrl; // 趣看文件存储地址

    @TableField
    private String qukanVideoCoverUrl; // 趣看封面视频地址

    @TableField
    private Integer extractStatus; // 提取状态 1提取中 10提取成功 -1提取失败 0未提取

    @TableField
    private String captions; // 字幕

    @TableField
    private String audioCutter; // 音频剪辑url

    @TableField
    private String mark; // 标记

    @TableField
    private String relativePath; // 文件相对路径

    @TableField
    private String absolutePath; // 文件绝对路径
}
